// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Copyright (c) 2012 The cwkshell Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cuc/src/cwkshell/browser//shell_network_delegate.h"


#include "net/base/net_errors.h"
#include "net/base/static_cookie_policy.h"
#include "net/url_request/url_request.h"


namespace cuc {
	namespace shell {
		namespace {
			bool g_accept_all_cookies = true;
		}

		ShellNetworkDelegate::ShellNetworkDelegate() {
			LOG(INFO)<<"ShellNetworkDelegate::ShellNetworkDelegate() CREATED";
		}

		ShellNetworkDelegate::~ShellNetworkDelegate() {
		}

		void ShellNetworkDelegate::SetAcceptAllCookies(bool accept) {
			g_accept_all_cookies = accept;
		}

		int ShellNetworkDelegate::OnBeforeURLRequest(
			net::URLRequest* request,
			const net::CompletionCallback& callback,
			GURL* new_url) {
				return net::OK;
		}

		int ShellNetworkDelegate::OnBeforeSendHeaders(
			net::URLRequest* request,
			const net::CompletionCallback& callback,
			net::HttpRequestHeaders* headers) {
				return net::OK;
		}

		void ShellNetworkDelegate::OnSendHeaders(
			net::URLRequest* request,
			const net::HttpRequestHeaders& headers) {
		}

		int ShellNetworkDelegate::OnHeadersReceived(
			net::URLRequest* request,
			const net::CompletionCallback& callback,
			const net::HttpResponseHeaders* original_response_headers,
			scoped_refptr<net::HttpResponseHeaders>* override_response_headers) {
				return net::OK;
		}

		void ShellNetworkDelegate::OnBeforeRedirect(net::URLRequest* request,
			const GURL& new_location) {
		}

		void ShellNetworkDelegate::OnResponseStarted(net::URLRequest* request) {
		}

		void ShellNetworkDelegate::OnRawBytesRead(const net::URLRequest& request,
			int bytes_read) {
		}

		void ShellNetworkDelegate::OnCompleted(net::URLRequest* request, bool started) {
		}

		void ShellNetworkDelegate::OnURLRequestDestroyed(net::URLRequest* request) {
		}

		void ShellNetworkDelegate::OnPACScriptError(int line_number,
			const string16& error) {
		}

		ShellNetworkDelegate::AuthRequiredResponse ShellNetworkDelegate::OnAuthRequired(
			net::URLRequest* request,
			const net::AuthChallengeInfo& auth_info,
			const AuthCallback& callback,
			net::AuthCredentials* credentials) {
				return AUTH_REQUIRED_RESPONSE_NO_ACTION;
		}

		bool ShellNetworkDelegate::OnCanGetCookies(const net::URLRequest& request,
			const net::CookieList& cookie_list) {
				net::StaticCookiePolicy::Type policy_type = g_accept_all_cookies ?
					net::StaticCookiePolicy::ALLOW_ALL_COOKIES :
				net::StaticCookiePolicy::BLOCK_SETTING_THIRD_PARTY_COOKIES;
				net::StaticCookiePolicy policy(policy_type);
				int rv = policy.CanGetCookies(
					request.url(), request.first_party_for_cookies());
				return rv == net::OK;
		}

		bool ShellNetworkDelegate::OnCanSetCookie(const net::URLRequest& request,
			const std::string& cookie_line,
			net::CookieOptions* options) {
				net::StaticCookiePolicy::Type policy_type = g_accept_all_cookies ?
					net::StaticCookiePolicy::ALLOW_ALL_COOKIES :
				net::StaticCookiePolicy::BLOCK_SETTING_THIRD_PARTY_COOKIES;
				net::StaticCookiePolicy policy(policy_type);
				int rv = policy.CanSetCookie(
					request.url(), request.first_party_for_cookies());
				return rv == net::OK;
		}

		bool ShellNetworkDelegate::OnCanAccessFile(const net::URLRequest& request,
			const base::FilePath& path) const {
				return true;
		}

		bool ShellNetworkDelegate::OnCanThrottleRequest(
			const net::URLRequest& request) const {
				return false;
		}

		int ShellNetworkDelegate::OnBeforeSocketStreamConnect(
			net::SocketStream* socket,
			const net::CompletionCallback& callback) {
				return net::OK;
		}

		void ShellNetworkDelegate::OnRequestWaitStateChange(
			const net::URLRequest& request,
			RequestWaitState waiting) {
		}

	} // namespace shell
}  // namespace cuc
